#pragma once

#define SCSI_DATA_BUFFER_SIZE (512 * 512)
struct scsi_data
{
    int id;
    int len;
    byte* data;
    int data_len;
    int status;
    byte sense[256];
    int sense_len;
    byte reply[256];
    byte cmd[16];
    int reply_len;
    int direction;

    int offset;
    byte buffer[SCSI_DATA_BUFFER_SIZE];
    struct hd_hardfiledata* hfd;
    int nativescsiunit;
};

extern struct scsi_data* scsi_alloc(int, struct hd_hardfiledata*);
extern struct scsi_data* scsi_alloc_native(int, int);
extern void scsi_free(struct scsi_data*);
extern void scsi_reset();

extern void scsi_start_transfer(struct scsi_data*, int);
extern int scsi_send_data(struct scsi_data*, byte);
extern int scsi_receive_data(struct scsi_data*, byte*);
extern void scsi_emulate_cmd(struct scsi_data* sd);
extern int scsi_data_dir(struct scsi_data* sd);